맨위로가기

프로세스 식별자

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

프로세스 식별자(PID)는 운영 체제에서 실행 중인 각 프로세스를 고유하게 식별하는 데 사용되는 숫자이다. 유닉스 계열 운영 체제에서 PID는 `fork()` 시스템 호출로 생성된 자식 프로세스에 할당되며, 부모 프로세스는 자식 프로세스의 PID를 통해 자식 프로세스를 관리할 수 있다. PID는 일반적으로 0부터 시작하여 순차적으로 증가하며, 최댓값에 도달하면 다시 특정 값부터 시작한다. 특별한 PID로 PID 0은 커널의 일부인 'swapper' 또는 'sched'에, PID 1은 'init' 프로세스에 할당된다. 윈도우 운영 체제에서는 `GetCurrentProcessId()` API를 통해 현재 PID를, `GetProcessId()` API를 통해 다른 프로세스의 PID를 확인할 수 있다. 일부 프로세스는 다른 프로세스가 참조할 수 있도록 PID를 파일에 기록하기도 한다.

더 읽어볼만한 페이지

  • 운영체제 기술 - 프로세스
    프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다.
  • 운영체제 기술 - 커널 (컴퓨팅)
    커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
프로세스 식별자
프로세스 식별자
정의운영 체제 커널이 활성 프로세스를 식별하기 위해 사용하는 숫자
약칭PID
종류정수
중요성프로세스 관리
시스템 모니터링
디버깅
동작 방식
할당운영 체제가 새 프로세스를 시작할 때마다 고유한 PID를 할당
이미 사용 중인 PID는 재사용하지 않음 (시스템 재부팅 후에는 재사용 가능)
범위시스템에 따라 다르지만 일반적으로 작은 정수 (예: 32767)
특별한 PID0: 스케줄러 또는 idle 프로세스
1: init 프로세스 (모든 프로세스의 조상)
2: 커널 프로세스
사용 예시
프로세스 관리특정 프로세스를 종료하거나 우선 순위를 변경하는 데 사용
시스템 모니터링시스템 자원 사용량을 추적하고 비정상적인 프로세스를 식별하는 데 사용
디버깅프로세스의 상태를 검사하고 오류를 진단하는 데 사용
플랫폼 별 특징
유닉스 계열일반적으로 PID는 1부터 시작
`ps`, `kill`, `top` 등의 명령어를 통해 프로세스 관리
윈도우PID는 시스템에서 고유한 식별자로 사용
Task Manager 또는 PowerShell을 통해 프로세스 관리
보안 고려 사항
권한프로세스 PID를 사용하여 다른 프로세스에 신호를 보낼 수 있음
잘못된 프로세스에 신호를 보내면 시스템 불안정 또는 보안 문제 발생 가능
PID 재사용PID는 재사용될 수 있으므로, 오래된 PID를 사용하여 프로세스에 접근하는 것은 위험할 수 있음
보안을 위해 프로세스 생명 주기를 정확하게 관리해야 함

2. 유닉스 계열 운영 체제

유닉스 계열 운영 체제에서 새로운 프로세스는 fork() 시스템 호출을 통해 만들어진다. 이때 새로 만들어진 자식 프로세스의 PID가 부모 프로세스에 반환된다. 부모 프로세스는 이 PID를 통해 자식 프로세스를 기다리거나(`waitpid()` 함수) 종료시킬 수 있다(`kill()` 함수).[19]

2. 1. 특별한 PID

유닉스 계열 운영체제에서는 특별히 구별되는 두 가지 프로세스 식별자(PID)가 있다. PID 0은 'swapper' 또는 'sched'라고 불리는 커널의 일부로, 페이징을 담당한다. 리눅스에서는 이 프로세스의 스레드를 '유휴 작업'이라고도 부른다.[1] [2]

PID 1은 init 프로세스로, 주로 시스템을 시작하고 종료하는 역할을 한다. 원래 PID 1은 기술적인 이유로 init에 할당된 것이 아니라, 커널이 처음으로 실행한 프로세스였기 때문이다. 그러나 최근 유닉스 시스템들은 프로세스 형태의 커널 구성 요소를 포함하는 경우가 많아, 이전 시스템과의 호환성을 위해 PID 1을 init 프로세스용으로 예약해두고 있다.

2. 2. PID 할당 방식

PID는 일반적으로 0부터 시작해서 순차적으로 증가하며 최댓값에 도달하면 다시 특정 값부터 시작한다. 맥 OS X 및 HP-UX의 경우 100부터, 다른 시스템에서는 300부터 다시 시작한다. 이 과정에서 이미 할당된 PID는 건너뛰어 중복 할당을 방지한다.[19]

PID 재사용은 시스템 정보를 추출하거나 다른 프로세스에 몰래 메시지를 보내는 데 악용될 수 있어 보안 취약점으로 간주되기도 한다. 따라서 보안이 중요한 경우, MPE/iX와 같이 사용 가능한 가장 작은 PID를 사용하는 등 다른 PID 할당 방식을 사용하기도 한다.[7]

2. 3. PID 확인 방법

현재 프로세스의 PID는 `getpid()` 시스템 호출 또는 셸 변수 `$$`로 확인할 수 있다.[8] 부모 프로세스의 PID는 `getppid()` 시스템 호출로 얻을 수 있다.[9]

리눅스에서 PID 최댓값은 `/proc/sys/kernel/pid_max` 가상 파일에서 확인할 수 있다.[10]

3. 마이크로소프트 윈도우

마이크로소프트 윈도우에서는 `GetCurrentProcessId()` 윈도우 API를 통해[21] 현재 프로세스의 PID를, `GetProcessId()` API를 통해 다른 프로세스의 PID를 얻을 수 있다.[22]

3. 1. 내부적인 PID 관리

내부적으로 PID는 '클라이언트 ID'라고 불리며 스레드 ID와 같은 네임스페이스에 할당되므로 이 둘이 겹치는 일은 없다.[21] System Idle Process에는 PID 0번이 부여되고, 시스템 프로세스에는 PID 4번이 부여된다.[13] 시스템 프로세스에는 윈도우 2000에서 PID 8이, 윈도우 XP윈도우 서버 2003에서는 4가 부여된다.[13] Windows NT 제품군 운영 체제에서 프로세스 및 스레드 식별자는 모두 4의 배수이지만 이는 사양의 일부는 아니다.[14]

4. PID 파일 (pidfile)

MySQL 데몬과 같이 오랜 시간 실행되는 일부 프로세스들은 다른 프로세스가 참조할 수 있도록 PID를 파일에 기록한다.

참조

[1] 간행물 What is PID 0? https://blog.dave.tf[...]
[2] 간행물 Linux kernel code: tools/perf/builtin-sched.c https://git.kernel.o[...]
[3] 간행물 kill(2) — Linux manual page https://man7.org/lin[...]
[4] 간행물 sched_setscheduler(2) — Linux manual page https://man7.org/lin[...]
[5] 간행물 pid_namespaces(7) — Linux manual page https://man7.org/lin[...]
[6] 웹사이트 What's the maximum pid for Mac OS X? https://apple.stacke[...] 2024-11-02
[7] 간행물 comp.unix.aix Frequently Asked Questions http://www.faqs.org/[...] 2008-07-21
[8] 간행물 getpid https://pubs.opengro[...]
[9] 간행물 getppid https://pubs.opengro[...]
[10] 간행물 proc - process information pseudo-filesystem http://www.tin.org/b[...] 2009-12-28
[11] 간행물 GetCurrentProcessId Function https://docs.microso[...] Microsoft 2018-12-05
[12] 간행물 GetProcessId function https://docs.microso[...] Microsoft 2018-12-05
[13] 서적 Microsoft Windows Internals https://archive.org/[...] Microsoft Press
[14] 간행물 Why are process and thread IDs multiples of four? https://devblogs.mic[...] Microsoft 2008-02-28
[15] 웹사이트 comp.unix.aix Frequently Asked Questions http://www.faqs.org/[...] 2008-07-21
[16] 웹사이트 GetCurrentProcessId Function http://msdn.microsof[...] Windows Developer Center 2009-05-20
[17] 웹사이트 ProcessId Function http://msdn.microsof[...] Windows Developer Center 2011-03-05
[18] 웹사이트 proc - process information pseudo-filesystem http://www.tin.org/b[...] 2009-12-28
[19] 인용 comp.unix.aix Frequently Asked Questions http://www.faqs.org/[...] 2008-07-21
[20] 인용 proc - process information pseudo-filesystem http://www.tin.org/b[...] 2009-12-28
[21] 인용 GetCurrentProcessId Function http://msdn.microsof[...] Windows Developer Center 2009-05-20
[22] 인용 ProcessId Function http://msdn.microsof[...] Windows Developer Center 2011-03-05



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com